package com.zcc.blog.service;

import com.zcc.blog.dto.BlogCategoryDto;
import com.zcc.blog.entity.Blog;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zcc.blog.untils.Result;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zcc
 * @since 2022-09-05
 */
public interface BlogService extends IService<Blog> {

    /**
     * 查询所有的分类
     * @param currentPage
     * @param size
     * @param id
     * @param status
     * @return
     */
    public Result findBlogs(Integer currentPage, Integer size, Long id, Integer status);

    /**
     * 搜索分类
     * @param title
     * @param description
     * @param content
     * @param currentPage
     * @param size
     * @param id
     * @param status
     * @return
     */
    public Result searchBlogs(String title, String description, String content,  Integer currentPage, Integer size, Long id, Integer status);

    /**
     * 新增博客
     * @param blog
     * @return
     */
    public Result addBlog(BlogCategoryDto blog);

    /**
     * 修改博客
     * @param blog
     * @return
     */
    public Result updateBlog(BlogCategoryDto blog);
    /**
     * 按照时间顺序排序
     * @param currentPage
     * @param size
     * @param id
     * @return
     */
    public Result sortOrder(Integer currentPage, Integer size, Long id);

    /**
     * 按照时间逆序排序
     * @param currentPage
     * @param size
     * @param id
     * @return
     */
    public Result sortReversed(Integer currentPage, Integer size, Long id);

    /**
     * 删除博客
     * @param id
     * @return
     */
    public Result deleteBlog(Long id);

    /**
     * 恢复博客
     * @param id
     * @return
     */
    public Result recoverBlog(Long id);

    /**
     * 开启自我推荐
     * @param id
     * @return
     */
    public Result openRecommend(Long id);

    /**
     * 关闭自我推荐
     * @param id
     * @return
     */
    public Result closeRecommend(Long id);

    /**
     * 找到所有自我推荐的博客
     * @param currentPage
     * @param size
     * @return
     */
    public Result findRecommendBlogs(Integer currentPage, Integer size);

    /**
     * 统计每个月博客的发布量
     * @param id
     * @return
     */
    public Result countBlogsByMonth(Long id);

    /**
     * 统计用户博客的发布量
     * @param id
     * @return
     */
    public Result countBlogs(Long id);

    /**
     * 通过id寻找博客
     * @param id
     * @return
     */
    public Result findBlogById(Long id);

}
